home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / linux / if_packet.h < prev    next >
C/C++ Source or Header  |  2008-10-24  |  3KB  |  140 lines

  1. #ifndef __LINUX_IF_PACKET_H
  2. #define __LINUX_IF_PACKET_H
  3.  
  4. #include <linux/types.h>
  5.  
  6. struct sockaddr_pkt
  7. {
  8.     unsigned short spkt_family;
  9.     unsigned char spkt_device[14];
  10.     __be16 spkt_protocol;
  11. };
  12.  
  13. struct sockaddr_ll
  14. {
  15.     unsigned short    sll_family;
  16.     __be16        sll_protocol;
  17.     int        sll_ifindex;
  18.     unsigned short    sll_hatype;
  19.     unsigned char    sll_pkttype;
  20.     unsigned char    sll_halen;
  21.     unsigned char    sll_addr[8];
  22. };
  23.  
  24. /* Packet types */
  25.  
  26. #define PACKET_HOST        0        /* To us        */
  27. #define PACKET_BROADCAST    1        /* To all        */
  28. #define PACKET_MULTICAST    2        /* To group        */
  29. #define PACKET_OTHERHOST    3        /* To someone else     */
  30. #define PACKET_OUTGOING        4        /* Outgoing of any type */
  31. /* These ones are invisible by user level */
  32. #define PACKET_LOOPBACK        5        /* MC/BRD frame looped back */
  33. #define PACKET_FASTROUTE    6        /* Fastrouted frame    */
  34.  
  35. /* Packet socket options */
  36.  
  37. #define PACKET_ADD_MEMBERSHIP        1
  38. #define PACKET_DROP_MEMBERSHIP        2
  39. #define PACKET_RECV_OUTPUT        3
  40. /* Value 4 is still used by obsolete turbo-packet. */
  41. #define PACKET_RX_RING            5
  42. #define PACKET_STATISTICS        6
  43. #define PACKET_COPY_THRESH        7
  44. #define PACKET_AUXDATA            8
  45. #define PACKET_ORIGDEV            9
  46. #define PACKET_VERSION            10
  47. #define PACKET_HDRLEN            11
  48. #define PACKET_RESERVE            12
  49.  
  50. struct tpacket_stats
  51. {
  52.     unsigned int    tp_packets;
  53.     unsigned int    tp_drops;
  54. };
  55.  
  56. struct tpacket_auxdata
  57. {
  58.     __u32        tp_status;
  59.     __u32        tp_len;
  60.     __u32        tp_snaplen;
  61.     __u16        tp_mac;
  62.     __u16        tp_net;
  63.     __u16        tp_vlan_tci;
  64. };
  65.  
  66. struct tpacket_hdr
  67. {
  68.     unsigned long    tp_status;
  69. #define TP_STATUS_KERNEL    0
  70. #define TP_STATUS_USER        1
  71. #define TP_STATUS_COPY        2
  72. #define TP_STATUS_LOSING    4
  73. #define TP_STATUS_CSUMNOTREADY    8
  74.     unsigned int    tp_len;
  75.     unsigned int    tp_snaplen;
  76.     unsigned short    tp_mac;
  77.     unsigned short    tp_net;
  78.     unsigned int    tp_sec;
  79.     unsigned int    tp_usec;
  80. };
  81.  
  82. #define TPACKET_ALIGNMENT    16
  83. #define TPACKET_ALIGN(x)    (((x)+TPACKET_ALIGNMENT-1)&~(TPACKET_ALIGNMENT-1))
  84. #define TPACKET_HDRLEN        (TPACKET_ALIGN(sizeof(struct tpacket_hdr)) + sizeof(struct sockaddr_ll))
  85.  
  86. struct tpacket2_hdr
  87. {
  88.     __u32        tp_status;
  89.     __u32        tp_len;
  90.     __u32        tp_snaplen;
  91.     __u16        tp_mac;
  92.     __u16        tp_net;
  93.     __u32        tp_sec;
  94.     __u32        tp_nsec;
  95.     __u16        tp_vlan_tci;
  96. };
  97.  
  98. #define TPACKET2_HDRLEN        (TPACKET_ALIGN(sizeof(struct tpacket2_hdr)) + sizeof(struct sockaddr_ll))
  99.  
  100. enum tpacket_versions
  101. {
  102.     TPACKET_V1,
  103.     TPACKET_V2,
  104. };
  105.  
  106. /*
  107.    Frame structure:
  108.  
  109.    - Start. Frame must be aligned to TPACKET_ALIGNMENT=16
  110.    - struct tpacket_hdr
  111.    - pad to TPACKET_ALIGNMENT=16
  112.    - struct sockaddr_ll
  113.    - Gap, chosen so that packet data (Start+tp_net) alignes to TPACKET_ALIGNMENT=16
  114.    - Start+tp_mac: [ Optional MAC header ]
  115.    - Start+tp_net: Packet data, aligned to TPACKET_ALIGNMENT=16.
  116.    - Pad to align to TPACKET_ALIGNMENT=16
  117.  */
  118.  
  119. struct tpacket_req
  120. {
  121.     unsigned int    tp_block_size;    /* Minimal size of contiguous block */
  122.     unsigned int    tp_block_nr;    /* Number of blocks */
  123.     unsigned int    tp_frame_size;    /* Size of frame */
  124.     unsigned int    tp_frame_nr;    /* Total number of frames */
  125. };
  126.  
  127. struct packet_mreq
  128. {
  129.     int        mr_ifindex;
  130.     unsigned short    mr_type;
  131.     unsigned short    mr_alen;
  132.     unsigned char    mr_address[8];
  133. };
  134.  
  135. #define PACKET_MR_MULTICAST    0
  136. #define PACKET_MR_PROMISC    1
  137. #define PACKET_MR_ALLMULTI    2
  138.  
  139. #endif
  140.